﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;

namespace AvaProvi
{
    [Serializable]
    public class clsEntorno_CRN:clsEstado,IControlEstados
    {
        #region Propiedades de clase
        public clsInmueble_CRN Inmueble { get; set; }
        public string ClasificacionZona { get; set; }
        public string ReferenciaProxUrbana { get; set; }
        public string TipoConstruccionPredominante { get; set; }
        public string TipoConstGreneral { get; set; }
        public string IndiceSaturacionZona { get; set; }
        public string DensidadDePoblacion { get; set; }
        public string NivelSocioeconomico { get; set; }
        public string ContaminacionAmbiental { get; set; }
        public string FuenteDeContaminacion { get; set; }
        public string ZonaSismica { get; set; }
        public BindingList<clsViaDeAcceso_CRN> ViasDeAcceso { get; set; }
        #endregion

        #region Constructor
        public clsEntorno_CRN(clsInmueble_CRN objInmueble)
            : base()
        {
            this.Inmueble = objInmueble;
            this.ClasificacionZona = string.Empty;
            this.ContaminacionAmbiental = string.Empty;
            this.DensidadDePoblacion = string.Empty;
            this.FuenteDeContaminacion = string.Empty;
            this.IndiceSaturacionZona = string.Empty;
            this.NivelSocioeconomico = string.Empty;
            this.ReferenciaProxUrbana = string.Empty;
            this.TipoConstGreneral = string.Empty;
            this.TipoConstruccionPredominante = string.Empty;
            this.ZonaSismica = string.Empty;
            this.ViasDeAcceso = new BindingList<clsViaDeAcceso_CRN>();
        }
        #endregion

        #region IControlEstados Members

        public void ConvertirANuevo()
        {
            this.EsNuevo = true;
            foreach (clsViaDeAcceso_CRN via in this.ViasDeAcceso)
            {
                via.EsNuevo = true;
            }
        }

        public bool Guardar()
        {
            if (this.DatosValidos())
            {
                if (this.EsNuevo)
                    return CreaEntorno();
                else
                {
                    if (this.EsModificado)
                        return ActualizaEntorno();
                    else
                        return EliminaEntorno();
                }
            }
            return false;
        }

        private bool EliminaEntorno()
        {
            clsEntorno_CD objEntorno_CD = new clsEntorno_CD();
            return objEntorno_CD.EliminaEntorno(this);
        }

        private bool ActualizaEntorno()
        {
            clsEntorno_CD objEntorno_CD = new clsEntorno_CD();
            if (objEntorno_CD.ModificaEntorno(this))
            {
                if (this.ViasDeAcceso != null)
                {
                    foreach (clsViaDeAcceso_CRN objViaDeAcceso in this.ViasDeAcceso)
                    {
                        objViaDeAcceso.Guardar();
                    }
                }

                return true;
            }
            return false;
        }

        private bool CreaEntorno()
        {
            clsEntorno_CD objEntorno_CD = new clsEntorno_CD();
            if (objEntorno_CD.CreaEntorno(this))
            {
                this.EsModificado = true;
                if (this.ViasDeAcceso != null)
                {
                    foreach (clsViaDeAcceso_CRN objViaDeAcceso in this.ViasDeAcceso)
                    {
                        objViaDeAcceso.Guardar();
                    }
                    this.ViasDeAcceso = clsViaDeAcceso_CRN.RecuperaViasDeAcceso(this);
                }
               
                return true;
            }
            return false;
        }

        public bool DatosValidos()
        {
            return true;
        }

        public static clsEntorno_CRN RecuperaEntorno(clsInmueble_CRN objInmueble)
        {
            clsEntorno_CRN objEntorno = new clsEntorno_CRN(objInmueble);
            clsEntorno_CD objEntorno_CD = new clsEntorno_CD();
            dsEntorno.EntornoRow objEntornoRecuperado = objEntorno_CD.RecuperaEntorno(objInmueble.Avaluo.IdAvaluo);
            if (objEntornoRecuperado != null)
            {
                objEntorno.ClasificacionZona = objEntornoRecuperado.ClasificacionZona;
                objEntorno.ContaminacionAmbiental = objEntornoRecuperado.ContaminacionAmbiental;
                objEntorno.DensidadDePoblacion = objEntornoRecuperado.DensidadDePoblacion;
                objEntorno.EsModificado = true;
                objEntorno.FuenteDeContaminacion = objEntornoRecuperado.FuenteDeContaminacion;
                objEntorno.IndiceSaturacionZona = objEntornoRecuperado.IndiceSaturacionZona;
                objEntorno.NivelSocioeconomico = objEntornoRecuperado.NivelSocioEconomico;
                objEntorno.ReferenciaProxUrbana = objEntornoRecuperado.ReferenciaProxUrbana;
                objEntorno.TipoConstGreneral = objEntornoRecuperado.TipoConstGeneral;
                objEntorno.TipoConstruccionPredominante = objEntornoRecuperado.TipoConstrucPredominante;
                objEntorno.ViasDeAcceso = clsViaDeAcceso_CRN.RecuperaViasDeAcceso(objEntorno);
                objEntorno.ZonaSismica = objEntornoRecuperado.ZonaSismica;
            }
            return objEntorno;
        }

        #endregion
    }
}
